import axios from "axios";
import {useUserStore} from "@/stores/modules/user.js";
import router from "@/router/routeIndex.js";
import {ElMessageBox} from "element-plus";

const baseURL = 'http://localhost:8081/core';

// 创建axios实例
const instance = axios.create({
    baseURL, // 设置API基础URL
    timeout: 10000, // 请求超时时间
    withCredentials: true,
    headers: {
        'Content-Type': 'application/json'
    }
})

// 请求拦截器
instance.interceptors.request.use(
    config => {
        // TODO 2. 携带token
        const useStore = useUserStore()
        if (useStore.token) {
            config.headers.Authorization = 'Bearer ' + useStore.token
        }
        // 在发送请求之前做些什么
        return config
    },
    error => {
        // 对请求错误做些什么
        console.error('请求错误:', error)
        return Promise.reject(error)
    }
)

// 响应拦截器
instance.interceptors.response.use(
    response => {
        // TODO 4. 摘取核心响应数据
        if (response.data.result) {
            return response
        }
        // TODO 3. 处理业务失败
        // 处理业务失败, 给错误提示，抛出错误
        console.error(response.data.message || '服务异常')

        // 对响应数据做点什么
        return response.data
    },
    error => {
        const userStore = useUserStore();
        // TODO 5. 处理401错误
        // 错误的特殊情况 => 401 权限不足 或 token 过期 => 拦截到登录
        if (error.response) {
            if (error.response?.status === 401) {
                ElMessageBox.alert(error.response.data.message, '认证错误', {
                    confirmButtonText: '确认'
                }).then(r => {
                    userStore.removeToken();
                    router.removeRoute('dynamicLoaded')
                    router.push({
                        path: '/login',
                        query: {t: Date.now()}
                    }).catch(err => {
                        console.error("路由跳转失败：", err)
                    })
                })
            } else {
                // 错误的默认情况 => 只要给提示
                console.error(error.response.data.message || '服务异常')
                ElMessageBox.alert(error.response.data.message, '提示信息')
            }
        } else {
            ElMessageBox.alert('服务器异常，请联系管理员', '提示信息')
        }
        // 对响应错误做点什么
        return Promise.reject(error)
    }
)

export default instance
